home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / nethack.lha / nethack-3.1 / include / rm.h < prev    next >
C/C++ Source or Header  |  1993-01-17  |  10KB  |  368 lines

  1. /*    SCCS Id: @(#)rm.h    3.1    92/09/01          */
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. #ifndef RM_H
  6. #define RM_H
  7.  
  8. /*
  9.  * The dungeon presentation graphics code and data structures were rewritten
  10.  * and generalized for NetHack's release 2 by Eric S. Raymond (eric@snark)
  11.  * building on Don G. Kneller's MS-DOS implementation.  See drawing.c for
  12.  * the code that permits the user to set the contents of the symbol structure.
  13.  *
  14.  * The door representation was changed by Ari Huttunen(ahuttune@niksula.hut.fi)
  15.  */
  16.  
  17. /*
  18.  * TLCORNER    TDWALL        TRCORNER
  19.  * +-         -+-         -+
  20.  * |           |            |
  21.  *
  22.  * TRWALL    CROSSWALL    TLWALL        HWALL
  23.  * |           |           |
  24.  * +-         -+-         -+        ---
  25.  * |           |           |
  26.  *
  27.  * BLCORNER    TUWALL        BRCORNER    VWALL
  28.  * |           |           |        |
  29.  * +-         -+-         -+        |
  30.  */
  31.  
  32. /* Level location types */
  33. #define STONE        0
  34. #define VWALL        1
  35. #define HWALL        2
  36. #define TLCORNER    3
  37. #define TRCORNER    4
  38. #define BLCORNER    5
  39. #define BRCORNER    6
  40. #define CROSSWALL    7    /* For pretty mazes and special levels */
  41. #define TUWALL        8
  42. #define TDWALL        9
  43. #define TLWALL        10
  44. #define TRWALL        11
  45. #define DBWALL        12
  46. #define SDOOR        13
  47. #define SCORR        14
  48. #define POOL        15
  49. #define MOAT        16    /* pool that doesn't boil, adjust messages */
  50. #define WATER        17
  51. #define DRAWBRIDGE_UP    18
  52. #define LAVAPOOL    19
  53. #define DOOR        20
  54. #define CORR        21
  55. #define ROOM        22
  56. #define STAIRS        23
  57. #define LADDER        24
  58. #define FOUNTAIN    25
  59. #define THRONE        26
  60. #define SINK        27
  61. #define ALTAR        28
  62. #define ICE        29
  63. #define DRAWBRIDGE_DOWN    30
  64. #define AIR        31
  65. #define CLOUD        32
  66.  
  67. #define INVALID_TYPE    127
  68.  
  69. /*
  70.  * Avoid using the level types in inequalities:
  71.  * these types are subject to change.
  72.  * Instead, use one of the macros below.
  73.  */
  74. #define IS_WALL(typ)    ((typ) && (typ) <= DBWALL)
  75. #define IS_STWALL(typ)    ((typ) <= DBWALL)    /* STONE <= (typ) <= DBWALL */
  76. #define IS_ROCK(typ)    ((typ) < POOL)        /* absolutely nonaccessible */
  77. #define IS_DOOR(typ)    ((typ) == DOOR)
  78. #define ACCESSIBLE(typ)    ((typ) >= DOOR)        /* good position */
  79. #define IS_ROOM(typ)    ((typ) >= ROOM)        /* ROOM, STAIRS, furniture.. */
  80. #define ZAP_POS(typ)    ((typ) >= POOL)
  81. #define SPACE_POS(typ)    ((typ) > DOOR)
  82. #define IS_POOL(typ)    ((typ) >= POOL && (typ) <= DRAWBRIDGE_UP)
  83. #define IS_THRONE(typ)    ((typ) == THRONE)
  84. #define IS_FOUNTAIN(typ) ((typ) == FOUNTAIN)
  85. #define IS_SINK(typ)    ((typ) == SINK)
  86. #define IS_ALTAR(typ)    ((typ) == ALTAR)
  87. #define IS_DRAWBRIDGE(typ) ((typ) == DRAWBRIDGE_UP || (typ) == DRAWBRIDGE_DOWN)
  88. #define IS_FURNITURE(typ) ((typ) >= STAIRS && (typ) <= ALTAR)
  89. #define IS_AIR(typ)    ((typ) == AIR || (typ) == CLOUD)
  90. #define IS_SOFT(typ)    ((typ) == AIR || (typ) == CLOUD || IS_POOL(typ))
  91.  
  92. /*
  93.  * The screen symbols may be the default or defined at game startup time.
  94.  * See drawing.c for defaults.
  95.  * Note: {ibm|dec}_graphics[] arrays (also in drawing.c) must be kept in synch.
  96.  */
  97. #define S_stone        0
  98. #define S_vwall        1
  99. #define S_hwall        2
  100. #define S_tlcorn    3
  101. #define S_trcorn    4
  102. #define S_blcorn    5
  103. #define S_brcorn    6
  104. #define S_crwall    7
  105. #define S_tuwall    8
  106. #define S_tdwall    9
  107. #define S_tlwall    10
  108. #define S_trwall    11
  109. #define S_ndoor        12
  110. #define S_vodoor    13
  111. #define S_hodoor    14
  112. #define S_vcdoor    15    /* closed door, vertical wall */
  113. #define S_hcdoor    16    /* closed door, horizontal wall */
  114. #define S_room        17
  115. #define S_corr        18
  116. #define S_litcorr    19
  117. #define S_upstair    20
  118. #define S_dnstair    21
  119. #define S_upladder    22
  120. #define S_dnladder    23
  121. #define S_trap        24
  122. #define S_web        25
  123. #define S_altar        26
  124. #define S_throne    27
  125. #define S_sink        28
  126. #define S_fountain    29
  127. #define S_pool        30
  128. #define S_ice        31
  129. #define S_lava        32
  130. #define S_vodbridge    33
  131. #define S_hodbridge    34
  132. #define S_vcdbridge    35    /* closed drawbridge, vertical wall */
  133. #define S_hcdbridge    36    /* closed drawbridge, horizontal wall */
  134. #define S_air        37
  135. #define S_cloud        38
  136. #define S_water        39
  137. #define S_vbeam        40    /* The 4 zap beam symbols.  Do NOT separate. */
  138. #define S_hbeam        41    /* To change order or add, see function     */
  139. #define S_lslant    42    /* zapdir_to_glyph() in display.c.        */
  140. #define S_rslant    43
  141. #define S_digbeam    44    /* dig beam symbol */
  142. #define S_flashbeam    45    /* camera flash symbol */
  143. #define S_boomleft    46    /* thrown boomerang, open left, e.g ')'    */
  144. #define S_boomright    47    /* thrown boomerand, open right, e.g. '('  */
  145. #define S_ss1        48    /* 4 magic shield glyphs */
  146. #define S_ss2        49
  147. #define S_ss3        50
  148. #define S_ss4        51
  149.  
  150. /* The 8 swallow symbols.  Do NOT separate.  To change order or add, see */
  151. /* the function swallow_to_glyph() in display.c.             */
  152. #define S_sw_tl        52    /* swallow top left [1]            */
  153. #define S_sw_tc        53    /* swallow top center [2]    Order:    */
  154. #define S_sw_tr        54    /* swallow top right [3]        */
  155. #define S_sw_ml        55    /* swallow middle left [4]    1 2 3    */
  156. #define S_sw_mr        56    /* swallow middle right [6]    4 5 6    */
  157. #define S_sw_bl        57    /* swallow bottom left [7]    7 8 9    */
  158. #define S_sw_bc        58    /* swallow bottom center [8]        */
  159. #define S_sw_br        59    /* swallow bottom right [9]        */
  160.  
  161. #define S_explode1    60    /* explosion top left            */
  162. #define S_explode2    61    /* explosion top center            */
  163. #define S_explode3    62    /* explosion top right         Ex.    */
  164. #define S_explode4    63    /* explosion middle left        */
  165. #define S_explode5    64    /* explosion middle center     /-\    */
  166. #define S_explode6    65    /* explosion middle right     |@|    */
  167. #define S_explode7    66    /* explosion bottom left     \-/    */
  168. #define S_explode8    67    /* explosion bottom center        */
  169. #define S_explode9    68    /* explosion bottom right        */
  170.  
  171. #define MAXPCHARS    69    /* maximum number of mapped characters */
  172.  
  173. struct symdef {
  174.     uchar sym;
  175.     const char  *explanation;
  176. #ifdef TEXTCOLOR
  177.     uchar color;
  178. #endif
  179. };
  180.  
  181. extern const struct symdef defsyms[MAXPCHARS];    /* defaults */
  182. extern uchar showsyms[MAXPCHARS];
  183.  
  184. /*
  185.  * Graphics sets for display symbols
  186.  */
  187. #define ASCII_GRAPHICS    0    /* regular characters: '-', '+', &c */
  188. #define IBM_GRAPHICS    1    /* PC graphic characters */
  189. #define DEC_GRAPHICS    2    /* VT100 line drawing characters */
  190. #define MAC_GRAPHICS    3    /* Macintosh drawing characters */
  191.  
  192. /*
  193.  * The 5 possible states of doors
  194.  */
  195.  
  196. #define D_NODOOR    0
  197. #define D_BROKEN    1
  198. #define D_ISOPEN    2
  199. #define D_CLOSED    4
  200. #define D_LOCKED    8
  201. #define D_TRAPPED    16
  202.  
  203. /*
  204.  * The 3 possible alignments for altars
  205.  */
  206. #ifndef ALIGN_H
  207. #include "align.h"        /* defines the "AM_" values */
  208. #endif
  209.  
  210. /*
  211.  * Some altars are considered as shrines, so we need a flag.
  212.  */
  213. #define AM_SHRINE    8
  214.  
  215. /*
  216.  * Thrones should only be looted once.
  217.  */
  218. #define T_LOOTED    1
  219.  
  220. /*
  221.  * Fountains have limits, and special warnings.
  222.  */
  223. #define F_LOOTED    1
  224. #define F_WARNED    2
  225.  
  226. /*
  227.  * Sinks have 3 different types of loot that shouldn't be abused
  228.  */
  229. #define S_LPUDDING    1
  230. #define S_LDWASHER    2
  231. #define S_LRING        4
  232.  
  233. /*
  234.  * The four directions for a DrawBridge.
  235.  */
  236. #define DB_NORTH    0
  237. #define DB_SOUTH    1
  238. #define DB_EAST        2
  239. #define DB_WEST        3
  240. #define DB_DIR        3    /* mask for direction */
  241.  
  242. /*
  243.  * What's under a drawbridge.
  244.  */
  245. #define DB_MOAT        0
  246. #define DB_LAVA        4
  247. #define DB_ICE        8
  248. #define DB_FLOOR    16
  249. #define DB_UNDER    28    /* mask for underneath */
  250.  
  251. /*
  252.  * Some walls may be non diggable.
  253.  */
  254. #define W_DIGGABLE    0
  255. #define W_NONDIGGABLE    1
  256. #define W_REPAIRED    2
  257.  
  258. /*
  259.  * Ladders (in Vlad's tower) may be up or down.
  260.  */
  261. #define LA_UP        1
  262. #define LA_DOWN        2
  263.  
  264. /*
  265.  * Room areas may be iced pools
  266.  */
  267. #define ICED_POOL    8
  268. #define ICED_MOAT    16
  269.  
  270. /*
  271.  * The structure describing a coordinate position.
  272.  * Before adding fields, remember that this will significantly affect
  273.  * the size of temporary files and save files.
  274.  */
  275. struct rm {
  276.     int glyph;        /* what the hero thinks is there */
  277.     schar typ;        /* what is really there */
  278.     Bitfield(seen,1);    /* speed hack for room walls on corridors */
  279.     Bitfield(lit,1);    /* speed hack for lit rooms */
  280.     Bitfield(flags,5);    /* extra information for typ */
  281.     Bitfield(horizontal,1);    /* wall/door/etc is horiz. (more typ info) */
  282.     Bitfield(waslit,1);    /* remember if a location was lit */
  283.     Bitfield(roomno,6);    /* room # for special rooms */
  284.     Bitfield(edge,1);    /* marks boundaries for special rooms*/
  285. };
  286.  
  287. #define doormask    flags
  288. #define altarmask    flags
  289. #define diggable    flags
  290. #define ladder        flags
  291. #define drawbridgemask    flags
  292. #define looted        flags
  293. #define icedpool    flags
  294.  
  295. #define blessedftn      horizontal  /* a fountain that grants attribs */
  296.  
  297. struct damage {
  298.     struct damage *next;
  299.     long when, cost;
  300.     coord place;
  301.     schar typ;
  302. };
  303.  
  304. struct levelflags {
  305.     uchar    nfountains;    /* Number of fountains on level */
  306.     uchar    nsinks;        /* Number of sinks on the level */
  307.     /* Several flags that give hints about what's on the level */
  308.     Bitfield(has_shop, 1);
  309.     Bitfield(has_vault, 1);
  310.     Bitfield(has_zoo, 1);
  311.     Bitfield(has_court, 1);
  312.     Bitfield(has_morgue, 1);
  313.     Bitfield(has_beehive, 1);
  314. #ifdef ARMY
  315.     Bitfield(has_barracks, 1);
  316. #endif
  317.     Bitfield(has_temple, 1);
  318.     Bitfield(has_swamp, 1);
  319.     Bitfield(noteleport,1);
  320.     Bitfield(hardfloor,1);
  321.     Bitfield(nommap,1);
  322.     Bitfield(hero_memory,1);    /* hero has memory */
  323.     Bitfield(shortsighted,1);    /* monsters are shortsighted */
  324.     Bitfield(is_maze_lev,1);
  325.     Bitfield(is_cavernous_lev,1);
  326. };
  327.  
  328. typedef struct
  329. {
  330.     struct rm        locations[COLNO][ROWNO];
  331. #ifndef MICROPORT_BUG
  332.     struct obj        *objects[COLNO][ROWNO];
  333.     struct monst    *monsters[COLNO][ROWNO];
  334. #else
  335.     struct obj        *objects[1][ROWNO];
  336.     char        *yuk1[COLNO-1][ROWNO];
  337.     struct monst    *monsters[1][ROWNO];
  338.     char        *yuk2[COLNO-1][ROWNO];
  339. #endif
  340.     struct obj        *objlist;
  341.     struct monst    *monlist;
  342.     struct damage    *damagelist;
  343.     struct levelflags    flags;
  344. }
  345. dlevel_t;
  346.  
  347. extern dlevel_t    level;    /* structure describing the current level */
  348.  
  349. /*
  350.  * Macros for compatibility with old code. Someday these will go away.
  351.  */
  352. #define levl        level.locations
  353. #define fobj        level.objlist
  354. #define fmon        level.monlist
  355.  
  356. #define OBJ_AT(x,y)    (level.objects[x][y] != (struct obj *)0)
  357. /*
  358.  * Macros for encapsulation of level.monsters references.
  359.  */
  360. #define MON_AT(x,y)    (level.monsters[x][y] != (struct monst *)0)
  361. #define place_monster(m,x,y)    ((m)->mx=(x),(m)->my=(y),\
  362.                  level.monsters[(m)->mx][(m)->my]=(m))
  363. #define place_worm_seg(m,x,y)    level.monsters[x][y] = m
  364. #define remove_monster(x,y)    level.monsters[x][y] = (struct monst *)0
  365. #define m_at(x,y)        level.monsters[x][y]
  366.  
  367. #endif /* RM_H */
  368.